package SwordOffer2;

import java.util.HashMap;

public class day4_2 {
    public int findMaxLength(int[] nums) {
        int sum = 0;
        int res = 0;
        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(0, 0);//保存sum值，左边下标
        for (int i = 0; i < nums.length; i++) {
            //数值为零sum-1，数值为一sum+1，若数组0，1个数相等，累计和为0
            sum = nums[i] == 0 ? -1 : 1;
/*            if (nums[i]==0){
                sum -=1;
            }else {
                sum +=1;
            }*/
            if (map.containsKey(sum)) {
                /*
                 *sum若为零说明从开始累计和为零，0，1数目相等，长度为0到i的长度，
                 *   若不为零说明从sum1到sum2（sum1=sum2）的和为零，0，1的个数相等，数组长度为当前下标减去hashmap中记录的原sum的下标
                 */
                res = sum == 0 ? i + 1 : Math.max(res, i - map.get(sum));
            } else {
                //hashmap中没有sum，记录sum和当前下标value
                map.put(sum, i);
            }
        }
        return res;
    }

}
